home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6-1 / Night Owl's Shareware - PDSI-006-1 - Night Owl Corp (1992).iso / 033a / mfm_109b.arj / PUSHPOP.PAS < prev    next >
Pascal/Delphi Source File  |  1991-06-20  |  5KB  |  153 lines

  1. {========================================================================}
  2. Procedure PushRecord(Var TempEntry : ListPtr);
  3.   Begin
  4.     If (CurrentEntry^.PrevEntry <> NIL) Or (CurrentEntry^.NextEntry <> NIL) Then
  5.     Begin
  6.       Altered := True;
  7.       OldEntry := CurrentEntry;
  8.       If CurrentEntry^.PrevEntry = NIL Then
  9.       Begin
  10.         CurrentEntry^.NextEntry^.PrevEntry := NIL;
  11.         CurrentEntry := CurrentEntry^.NextEntry;
  12.         TopEntry := CurrentEntry;
  13.         FirstEntry := CurrentEntry;
  14.       End
  15.       Else
  16.       Begin
  17.         If CurrentEntry^.NextEntry = NIL Then
  18.         Begin
  19.           CurrentEntry^.PrevEntry^.NextEntry := NIL;
  20.           CurrentEntry := CurrentEntry^.PrevEntry;
  21.           LastEntry := CurrentEntry;
  22.           If TopEntry^.PrevEntry <> NIL Then
  23.           Begin
  24.             TopEntry := TopEntry^.PrevEntry;
  25.           End
  26.           Else
  27.           Begin
  28.             Dec(Row);
  29.           End;
  30.         End
  31.         Else
  32.         Begin
  33.           CurrentEntry^.PrevEntry^.NextEntry := CurrentEntry^.NextEntry;
  34.           CurrentEntry^.NextEntry^.PrevEntry := CurrentEntry^.PrevEntry;
  35.           CurrentEntry := CurrentEntry^.NextEntry;
  36.           If TopEntry = OldEntry Then TopEntry := CurrentEntry;
  37.         End;
  38.       End;
  39.       If TempEntry = NIL Then
  40.       Begin
  41.         TempEntry := OldEntry;
  42.         TempEntry^.PrevEntry := TempEntry;
  43.         TempEntry^.NextEntry := TempEntry;
  44.       End
  45.       Else
  46.       Begin
  47.         If TempEntry^.PrevEntry = TempEntry Then
  48.         Begin
  49.           OldEntry^.PrevEntry := TempEntry;
  50.           OldEntry^.NextEntry := TempEntry;
  51.           TempEntry^.PrevEntry := OldEntry;
  52.           TempEntry^.NextEntry := OldEntry;
  53.           TempEntry := OldEntry;
  54.         End
  55.         Else
  56.         Begin
  57.           OldEntry^.PrevEntry := TempEntry;
  58.           OldEntry^.NextEntry := TempEntry^.NextEntry;
  59.           TempEntry^.NextEntry^.PrevEntry := OldEntry;
  60.           TempEntry^.NextEntry := OldEntry;
  61.           TempEntry := OldEntry;
  62.         End;
  63.       End;
  64.       Dec(NumberOfEntries);
  65.       DisplayScreen;
  66.     End;
  67.   End;
  68. {========================================================================}
  69. Procedure PopRecord(Var TempEntry : ListPtr; BeforeOrAfter : Char);
  70.   Begin
  71.     If TempEntry <> NIL Then
  72.     Begin
  73.       OldEntry := TempEntry;
  74.       If TempEntry^.PrevEntry = TempEntry Then
  75.       Begin
  76.         TempEntry := NIL;
  77.       End
  78.       Else
  79.       Begin
  80.         TempEntry^.PrevEntry^.NextEntry := TempEntry^.NextEntry;
  81.         TempEntry^.NextEntry^.PrevEntry := TempEntry^.PrevEntry;
  82.         TempEntry := TempEntry^.PrevEntry;
  83.       End;
  84.       If BeforeOrAfter = 'B' Then
  85.       Begin
  86.         If CurrentEntry^.PrevEntry = NIL Then
  87.         Begin
  88.           OldEntry^.PrevEntry := CurrentEntry^.PrevEntry;
  89.           OldEntry^.NextEntry := CurrentEntry;
  90.           CurrentEntry^.PrevEntry := OldEntry;
  91.           CurrentEntry := OldEntry;
  92.           TopEntry := CurrentEntry;
  93.           FirstEntry := CurrentEntry;
  94.         End
  95.         Else
  96.         Begin
  97.           OldEntry^.PrevEntry := CurrentEntry^.PrevEntry;
  98.           OldEntry^.NextEntry := CurrentEntry;
  99.           CurrentEntry^.PrevEntry^.NextEntry := OldEntry;
  100.           CurrentEntry^.PrevEntry := OldEntry;
  101.           CurrentEntry := OldEntry;
  102.         End;
  103.       End
  104.       Else
  105.       Begin
  106.         If CurrentEntry^.NextEntry = NIL Then
  107.         Begin
  108.           OldEntry^.NextEntry := CurrentEntry^.NextEntry;
  109.           OldEntry^.PrevEntry := CurrentEntry;
  110.           CurrentEntry^.NextEntry := OldEntry;
  111.         End
  112.         Else
  113.         Begin
  114.           OldEntry^.NextEntry := CurrentEntry^.NextEntry;
  115.           OldEntry^.PrevEntry := CurrentEntry;
  116.           CurrentEntry^.NextEntry^.PrevEntry := OldEntry;
  117.           CurrentEntry^.NextEntry := OldEntry;
  118.         End;
  119.       End;
  120.       Inc(NumberOfEntries);
  121.       DisplayScreen;
  122.     End;
  123.   End;
  124. {========================================================================}
  125. Procedure ShowStack(Var TempEntry : ListPtr);
  126.   Begin
  127.     If TempEntry <> NIL Then
  128.     Begin
  129.       NextPrintEntry := TempEntry;
  130.       DisplayRecord(25);
  131.       AnsiGotoXY(24,80);
  132.     End;
  133.   End;
  134. {========================================================================}
  135. Procedure StackPrev(Var TempEntry : ListPtr);
  136.   Begin
  137.     If TempEntry <> NIL Then
  138.     Begin
  139.       TempEntry := TempEntry^.PrevEntry;
  140.       ShowStack(TempEntry);
  141.     End;
  142.   End;
  143. {========================================================================}
  144. Procedure StackNext(Var TempEntry : ListPtr);
  145.   Begin
  146.     If TempEntry <> NIL Then
  147.     Begin
  148.       TempEntry := TempEntry^.NextEntry;
  149.       ShowStack(TempEntry);
  150.     End;
  151.   End;
  152. {========================================================================}
  153.